<?php
//类定义
class my_session {
    protected $main_table = 'sys_session';
    protected $session_expire = 3600;           //有效时间 秒
    protected $db = null;

    function  __construct($db) {
        $this->db=$db;
		
        $domain = '.shoumedia.com';
        ini_set("session.save_handler", "user");
        //ini_set("session.bug_compat_warn"   ,0);
        //ini_set("session.bug_compat_42",    0);
		ini_set('session.gc_probability', 1);
		ini_set('session.gc_divisor', 1000); //(session.gc_probability/session.gc_divisor)
        //不使用 GET/POST 变量方式
        ini_set('session.use_trans_sid',     0);
        //设置垃圾回收最大生存时间
        ini_set('session.gc_maxlifetime',    $this->session_expire);
        //使用 COOKIE 保存 SESSION ID 的方式
        ini_set('session.use_cookies',       1);
       // ini_set('session.cookie_path',       INFO_PATH.'sesstemp/');
        //多主机共享保存 SESSION ID 的 COOKIE
        ini_set('session.cookie_domain',     $domain);

        //将 session.save_handler 设置为 user，而不是默认的 files
        session_module_name('user');
        //定义 SESSION 各项操作所对应的方法名：
        session_set_save_handler(
                array($this, 'open'),    
                array($this, 'close'),
                array($this, 'read'),
                array($this, 'write'),
                array($this, 'destroy'),
                array($this, 'gc')
        );
    }    //end function

    function open($save_path, $session_name) {
        return true;
    }    //end function

    function close() {
        return true;
    }    //end function

    function read($session_key) {
		
        $sql = "SELECT session_value FROM `".$this->main_table."` WHERE session_key='". $session_key ."' AND session_expire>=' ". time()."'";
        $rs =$this->db->getOne($sql);
        if ($rs) {
            return $rs;
        }    //end if
        return false;
    }    //end function

    function write($session_key, $value) {
        $sql = "SELECT session_key FROM ".$this->main_table." WHERE session_key='". $session_key."'";
        //my_print($value);
        // my_print($this->db);
        $key =$this->db->getOne($sql);
		
        if($key) {                              //存在记录
            $arr = array(
                    'session_expire'   => time()+$this->session_expire,
                    'session_value'    => addslashes($value)

            );
            $this->db->update($this->main_table, $arr, "session_key='".$session_key."'");
        }
        else {
			//$this->db->debug(1);
			 //$bt = debug_backtrace();
      	
			//dump($_SESSION);
            $arr = array(
                    'session_key'      => $session_key,
                    'session_expire'   => time()+$this->session_expire,
                    'session_value'    => addslashes($value),
                    'date'             => date("Y-m-d H:i:s")
            );
            $this->db->insert($this->main_table, $arr);
        }
        //写入 SESSION

        return true;
    }    //end function

    function destroy($session_key) {
        $this->db->delete($this->main_table,"session_key='".$session_key."'");
        return true;
    }    //end function

    function gc($maxlifetime = null) {
		$max = $maxlifetime ? $maxlifetime : $this->session_expire + 3600*24;
        $this->db->delete($this->main_table,"session_expire < '".$max."'");
        //由于经常性的对表 sess 做删除操作，容易产生碎片，
        //所以在垃圾回收中对该表进行优化操作。
        $this->db->execute("OPTIMIZE TABLE ".$this->main_table);
        return true;
    }    //end function
}   


?>
